package br.com.rotary.modelo;

import br.com.rotary.enums.MeioTransporte;
import br.com.rotary.enums.Status;
import br.com.rotary.enums.TipoConvidado;
import br.com.rotary.enums.TipoParticipante;
import br.com.rotary.generico.EntidadeGenerica;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author laverson
 */
@Entity
public class FichaInscricao extends EntidadeGenerica implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_ficha_inscricao", name = "seq_ficha_inscricao", allocationSize = 1)
    @GeneratedValue(generator = "seq_ficha_inscricao", strategy = GenerationType.SEQUENCE)
    private Long id;
    @Enumerated(EnumType.STRING)
    private TipoParticipante tipoParticipante;
    @OneToOne(cascade = {CascadeType.ALL})
    private Pessoa participante;
    @OneToOne
    private Clube clube;
    private String numeroAssociadoEmRI;
    @Enumerated(EnumType.STRING)
    private MeioTransporte meioTransporte;
    private String nomeCracha;
    @OneToOne(cascade = {CascadeType.ALL})
    private Pessoa convidado;
    private String nomeCrachaConvidado;
    @Enumerated(EnumType.STRING)
    private TipoConvidado tipoConvidado;
    @Lob
    private String obs;
    @Enumerated(EnumType.STRING)
    private Status status;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Anexo> anexos;

    public FichaInscricao() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public TipoParticipante getTipoParticipante() {
        return tipoParticipante;
    }

    public void setTipoParticipante(TipoParticipante tipoParticipante) {
        this.tipoParticipante = tipoParticipante;
    }

    public Pessoa getParticipante() {
        return participante;
    }

    public void setParticipante(Pessoa participante) {
        this.participante = participante;
    }

    public Clube getClube() {
        return clube;
    }

    public void setClube(Clube clube) {
        this.clube = clube;
    }

    public String getNumeroAssociadoEmRI() {
        return numeroAssociadoEmRI;
    }

    public void setNumeroAssociadoEmRI(String numeroAssociadoEmRI) {
        this.numeroAssociadoEmRI = numeroAssociadoEmRI;
    }

    public MeioTransporte getMeioTransporte() {
        return meioTransporte;
    }

    public void setMeioTransporte(MeioTransporte meioTransporte) {
        this.meioTransporte = meioTransporte;
    }

    public String getNomeCracha() {
        return nomeCracha;
    }

    public void setNomeCracha(String nomeCracha) {
        this.nomeCracha = nomeCracha;
    }

    public Pessoa getConvidado() {
        return convidado;
    }

    public void setConvidado(Pessoa convidado) {
        this.convidado = convidado;
    }

    public String getNomeCrachaConvidado() {
        return nomeCrachaConvidado;
    }

    public void setNomeCrachaConvidado(String nomeCrachaConvidado) {
        this.nomeCrachaConvidado = nomeCrachaConvidado;
    }

    public TipoConvidado getTipoConvidado() {
        return tipoConvidado;
    }

    public void setTipoConvidado(TipoConvidado tipoConvidado) {
        this.tipoConvidado = tipoConvidado;
    }

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 79 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 79 * hash + (this.tipoParticipante != null ? this.tipoParticipante.hashCode() : 0);
        hash = 79 * hash + (this.participante != null ? this.participante.hashCode() : 0);
        hash = 79 * hash + (this.clube != null ? this.clube.hashCode() : 0);
        hash = 79 * hash + (this.numeroAssociadoEmRI != null ? this.numeroAssociadoEmRI.hashCode() : 0);
        hash = 79 * hash + (this.meioTransporte != null ? this.meioTransporte.hashCode() : 0);
        hash = 79 * hash + (this.nomeCracha != null ? this.nomeCracha.hashCode() : 0);
        hash = 79 * hash + (this.convidado != null ? this.convidado.hashCode() : 0);
        hash = 79 * hash + (this.nomeCrachaConvidado != null ? this.nomeCrachaConvidado.hashCode() : 0);
        hash = 79 * hash + (this.tipoConvidado != null ? this.tipoConvidado.hashCode() : 0);
        hash = 79 * hash + (this.obs != null ? this.obs.hashCode() : 0);
        hash = 79 * hash + (this.status != null ? this.status.hashCode() : 0);
        hash = 79 * hash + (this.anexos != null ? this.anexos.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final FichaInscricao other = (FichaInscricao) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.tipoParticipante != other.tipoParticipante) {
            return false;
        }
        if (this.participante != other.participante && (this.participante == null || !this.participante.equals(other.participante))) {
            return false;
        }
        if (this.clube != other.clube && (this.clube == null || !this.clube.equals(other.clube))) {
            return false;
        }
        if ((this.numeroAssociadoEmRI == null) ? (other.numeroAssociadoEmRI != null) : !this.numeroAssociadoEmRI.equals(other.numeroAssociadoEmRI)) {
            return false;
        }
        if (this.meioTransporte != other.meioTransporte) {
            return false;
        }
        if ((this.nomeCracha == null) ? (other.nomeCracha != null) : !this.nomeCracha.equals(other.nomeCracha)) {
            return false;
        }
        if (this.convidado != other.convidado && (this.convidado == null || !this.convidado.equals(other.convidado))) {
            return false;
        }
        if ((this.nomeCrachaConvidado == null) ? (other.nomeCrachaConvidado != null) : !this.nomeCrachaConvidado.equals(other.nomeCrachaConvidado)) {
            return false;
        }
        if (this.tipoConvidado != other.tipoConvidado) {
            return false;
        }
        if ((this.obs == null) ? (other.obs != null) : !this.obs.equals(other.obs)) {
            return false;
        }
        if (this.status != other.status) {
            return false;
        }
        if (this.anexos != other.anexos && (this.anexos == null || !this.anexos.equals(other.anexos))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "FichaInscricao{" + "id=" + id + ", tipoParticipante=" + tipoParticipante + ", participante=" + participante + ", clube=" + clube + ", numeroAssociadoEmRI=" + numeroAssociadoEmRI + ", meioTransporte=" + meioTransporte + ", nomeCracha=" + nomeCracha + ", convidado=" + convidado + ", nomeCrachaConvidado=" + nomeCrachaConvidado + ", tipoConvidado=" + tipoConvidado + ", obs=" + obs + ", status=" + status + ", anexos=" + anexos + '}';
    }
}
